package com.gmall.realtime.dws.function;

import com.gmall.realtime.dws.util.IkUtil;
import org.apache.flink.table.annotation.DataTypeHint;
import org.apache.flink.table.annotation.FunctionHint;
import org.apache.flink.table.functions.TableFunction;
import org.apache.flink.types.Row;

import java.util.Set;

@FunctionHint(output = @DataTypeHint("row<keyword string>"))
public class KwSplit extends TableFunction<Row> {
    /**
     * 将输入的关键词字符串进行分词处理，并输出分词结果
     * 这是一个Flink TableFunction的eval方法，用于处理每行输入数据
     *
     * @param kw 待分词的关键词字符串，例如："华为手机白色手机"
     */
    public void eval(String kw) {
        // 检查输入参数是否为空
        if (kw == null) {
            return;
        }

        // 使用IK分词器对关键词进行分词，返回分词结果集合
        // 示例输入："华为手机白色手机" 可能返回: ["华为", "手机", "白色"]
        Set<String> keywords = IkUtil.split(kw);

        // 遍历分词结果，将每个关键词包装成Row对象输出
        for (String keyword : keywords) {
            collect(Row.of(keyword));
        }
    }

}